﻿/*
 * Copyright (c) 2009, Thiago M. Sayao <thiago.sayao@gmail.com>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met:
 *  * Redistributions of source code must retain the above copyright notice, 
 *    this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *  * Neither the name of the author nor the names of its contributors may be 
 *    used to endorse or promote products derived from this software without 
 *    specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 * POSSIBILITY OF SUCH DAMAGE.
 */

using System;
using System.Collections.Generic;
using System.Linq;
using DotNetBurner.Model;
using DotNetBurner.Core;

namespace DotNetBurner
{
    public static class StoryDataHelper
    {
        public static string GetTags(string content, IEnumerable<Tag> topTags, string metaKeywords)
        {
            //add tags
            string[] tags = (from t in topTags select t.Name).ToArray();

            string[] kwords = content.FindKeyWords(tags, StorySettings.Settings.MaxTagsPerStory);

            //if no keywords is found by top tags, try the meta keywords
            if (kwords.Length == 0 && !String.IsNullOrEmpty(metaKeywords))
                kwords = (from t in metaKeywords.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) 
                          where t.Length <= StorySettings.Settings.MaxTagSizeInChars 
                          && t.Length >= StorySettings.Settings.MinTagSizeInChars
                          select t).Take(StorySettings.Settings.MaxTagsPerStory).ToArray();

           return String.Join(", ", kwords);
        }

        public static string GetCategory(string content, IEnumerable<Category> categories)
        {
            //add categories
            List<Category> categs = new List<Category>();

            foreach (Category cat in categories)
            {
                categs.AddRange(cat.SubCategories);
            }

            string[] strCategories = (from c in categs
                                      select c.Name).ToArray();

            strCategories = content.FindKeyWords(strCategories, 1);

            if (strCategories.Length > 0)
                return strCategories[0];

            return String.Empty;
         }

        public static int GetCategory(string content, Repository repository)
        {
            var categories = repository.GetCategories();

            string cat = GetCategory(content, categories);

            if (cat.Length != 0)
            {
                Category objCategory = repository.GetCategoryByName(cat);

                if(objCategory != null)
                    return objCategory.CategoryId;
            }

            return -1;
        }
    }
}
